package com.hkbigdata.sybx.service.ipml;

import com.hkbigdata.sybx.bean.PlayCount;
import com.hkbigdata.sybx.mapper.PlayCountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hkbigdata.sybx.service.PlayCountService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Slf4j // 添加Slf4j注解用于日志记录
public class PlayCountServiceImpl implements PlayCountService {

    private final PlayCountMapper playCountMapper;

    // 使用构造函数注入替代字段注入
    @Autowired
    public PlayCountServiceImpl(PlayCountMapper playCountMapper) {
        this.playCountMapper = playCountMapper;
    }

    /**
     * 递增指定视频的播放次数。
     * 如果视频不存在，则插入新记录并初始化播放次数为1。
     * 如果视频存在，则递增其播放次数。
     * @param videoTitle 视频的标题
     * @return 更新后的 PlayCount 对象
     */
    @Override
    @Transactional
    public PlayCount incrementPlayCount(String videoTitle) {
        log.info("尝试递增视频播放次数，视频标题: {}", videoTitle);
        PlayCount existingPlayCount = playCountMapper.selectPlayCountByTitle(videoTitle);

        if (existingPlayCount != null) {
            log.info("找到现有视频记录: {}", existingPlayCount);
            // 如果视频记录已存在，则递增播放次数
            String currentCountStr = existingPlayCount.getPlayCount();
            long currentCount;
            if (currentCountStr == null || currentCountStr.isEmpty()) {
                currentCount = 0; // 处理 null 或空字符串的情况
                log.warn("视频 {} 的播放次数为 null 或空，将其初始化为 0 进行递增.", videoTitle);
            } else {
                try {
                    currentCount = Long.parseLong(currentCountStr);
                } catch (NumberFormatException e) {
                    currentCount = 0; // 处理非数字字符串的情况
                    log.error("视频 {} 的播放次数 '{}' 无法解析为数字，将其初始化为 0 进行递增. 错误: {}", videoTitle, currentCountStr, e.getMessage());
                }
            }

            existingPlayCount.setPlayCount(String.valueOf(currentCount + 1));
            int updatedRows = playCountMapper.updatePlayCount(existingPlayCount);
            if (updatedRows == 0) {
                log.warn("更新视频 {} 的播放次数失败，没有行被更新.", videoTitle);
            }
            log.info("视频 {} 播放次数已递增至: {}", videoTitle, existingPlayCount.getPlayCount());
            return existingPlayCount;
        } else {
            // 如果视频记录不存在，则插入新记录，播放次数初始化为1
            log.info("未找到视频记录 {}，将插入新记录.", videoTitle);
            // ****** 核心修改在这里：传入 null 作为 id ******
            PlayCount newPlayCount = new PlayCount(null, videoTitle, "1"); // 使用 @AllArgsConstructor 生成的构造函数，传入 null 作为 id
            playCountMapper.insertPlayCount(newPlayCount);
            log.info("已插入视频 {}，播放次数初始化为: {}", videoTitle, newPlayCount.getPlayCount());
            return newPlayCount;
        }
    }

    /**
     * 获取所有视频的播放次数。
     * @return 包含所有视频播放次数的列表
     */
    @Override
    public List<PlayCount> getAllPlayCounts() {
        log.info("正在获取所有视频的播放次数.");
        return playCountMapper.selectAllPlayCounts();
    }
}